package beanstao.util.table;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import beanstao.util.interfaces.to.IToJson;
import beanstao.util.json.JsonLib;

/**
 * 数据存储的行
 * 
 * @author beanstao@google.com 
 */
public class Row implements IToJson
{
	private Metas metas;
	/**
	 * 行中的单元格数据
	 */
	private final List<Object> values;

	protected Row(Metas metas)
	{
		this.metas = metas;
		values = new ArrayList<Object>(metas.size());
		for (int i = 0; i < metas.size(); i++)
			values.add(0);
	}

	void setMeta(Metas metas)
	{
		this.metas = metas;
	}

	public Metas getMetas()
	{
		return metas;
	}

	public Row reset()
	{
		values.clear();
		return this;
	}

	/**
	 * 根据指定的行中的单元格的索引值，保存单元格数据
	 * @param index 单元格的索引值
	 * @param value 单元格数据
	 */
	public void set(int index, Object value)
	{
		values.set(index, value);
	}

	public void set(String name, Object value)
	{
		this.set(metas.indexOf(name), value);
	}

	public int indexOf(String name)
	{
		return metas.indexOf(name);
	}

	public Object get(int index)
	{
		return values.get(index);
	}

	public Object get(String name)
	{
		return values.get(metas.indexOf(name));
	}

	@Override
	public String toJson()
	{
		HashMap<String, Object> map = new HashMap<String, Object>();
		for (int i = 0; i < metas.size(); i++)
			map.put(metas.get(i).getName(), values.get(i));
		return JsonLib.fromObject(map);
	}
}
